package cn.ricecode.restructure.java8;

import java.util.Comparator;
import java.util.List;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author LiuZhulan
 */
public class T {

    public static void main(String[] args) {

        CartService c = new CartService();
        List<Sku> cartSkuList = c.getCartSkuList();

        //filter
        cartSkuList.stream().filter(s -> s.getName().equals("戴尔"))
                .forEach(s -> System.out.println(s.getName()));

        //map
        Stream<String> stringStream = cartSkuList.stream().map(Sku::getName);
        stringStream.forEach(System.out::print);

        System.out.println();
        /**
         * peek，销毁流
         * Consumer是没有返回值的，它只是对Stream中的元素进行某些操作，但是操作之后的数据并不返回到Stream中，所以Stream中的元素还是原来的元素
         * 而Function是有返回值的，这意味着对于Stream的元素的所有操作都会作为新的结果返回到Stream中
         * peek String不会发生变化而peek Object会发送变化的原因
         */
        cartSkuList.stream().peek(s -> s.setName("peek"))
                .forEach(s -> {
                    System.out.println(s.getName());
                });

        //sorted
        Stream<Sku> sorted = cartSkuList.stream().sorted(Comparator.comparing(Sku::getPrice));
        sorted.forEach(s->{
            System.out.println(s.toString());
        });
        c.getCartSkuList();
        //distinct
        List<String> collect = cartSkuList.stream().map(Sku::getName).distinct().collect(Collectors.toList());
        collect.forEach(s->{
            System.out.println(s.toString());
        });

    }
}
